home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / hplj1000 < prev    next >
Text File  |  2009-10-19  |  5KB  |  223 lines

  1. #!/bin/sh
  2.  
  3. #    hplj1000:
  4. #    hplj1005:
  5. #    hplj1020:
  6. #
  7. #    Hotplug script for HP1000/1005 USB laser printers.  The model number
  8. #    that this script deals with is determined from the script name.
  9. #
  10. #    Used to download firmware automatically into the printer when it
  11. #    is powered up or plugged into the USB port.
  12. #
  13. #    Also, run this script once with the magic argument "install-usermap"
  14. #    to create the proper entry in the /etc/hotplug/usb.usermap file.
  15. #
  16. #    The inspiration fo this script is from:
  17. #        Oscar Santacreu. Alicante-Spain (2002)
  18. #        Mike Morgan (2004)
  19. #
  20.  
  21. # udev calls us twice on FC4! Just want /dev/usb/lp<N>
  22. case "$DEVNAME" in
  23. /dev/usb/usb*)    exit;;
  24. esac
  25.  
  26. PROGNAME="$0"
  27.  
  28. #
  29. # Set $DEV to, e.g. /dev/usb/lp0, to force the device you want
  30. # Else, leave it null to automatically detect the device
  31. #
  32. DEV=/dev/usb/lp0
  33. DEV=""
  34.  
  35. #
  36. # Directory to find downloadable HP firmware files sihpMMMM.dl
  37. #
  38. FWDIR=/usr/share/foo2zjs/firmware
  39.  
  40. #
  41. # Program used to determine USB printer id information
  42. #
  43. # NOTE: /usr/bin is NOT mounted at this point
  44. #
  45. # e.g. /etc/rc.sysinit:
  46. #    /sbin/start_udev
  47. #    [snip]
  48. #    # Mount all other filesystems (except for NFS and /proc, which is already
  49. #
  50. PRINTERID=`which usb_printerid`
  51.  
  52. #
  53. #    Figure out how to log our messages
  54. #
  55. if [ -t 1 ]; then
  56.     # Running from a tty...
  57.     log() {
  58.     echo "$PROGNAME: foo2zjs: $@"
  59.     }
  60. elif [ -x /usr/bin/logger ]; then
  61.     # Have logger...
  62.     log() {
  63.     logger -t "$PROGNAME" -- "foo2zjs: $@"
  64.     }
  65. else
  66.     # No logger...
  67.     log() {
  68.     echo "$PROGNAME: foo2zjs: $@" >> /var/log/messages
  69.     }
  70. fi
  71.  
  72. #
  73. #    Figure out the model number from the name of this script
  74. #
  75. case "$0" in
  76. *P1005)
  77.     MODEL=P1005; FWMODEL=$MODEL
  78.     USB1=0x03f0    #Vendor
  79.     USB2=0x3d17    #Model
  80.     ;;
  81. *P1006)
  82.     MODEL=P1006; FWMODEL=$MODEL
  83.     USB1=0x03f0    #Vendor
  84.     USB2=0x3e17    #Model
  85.     ;;
  86. *P1007)
  87.     MODEL=P1007; FWMODEL=P1005        # Alias
  88.     USB1=0x03f0    #Vendor
  89.     USB2=0x4817    #Model
  90.     ;;
  91. *P1008)
  92.     MODEL=P1008; FWMODEL=P1006        # Alias
  93.     USB1=0x03f0    #Vendor
  94.     USB2=0x4917    #Model
  95.     ;;
  96. *P1505)
  97.     MODEL=P1505; FWMODEL=$MODEL
  98.     USB1=0x03f0    #Vendor
  99.     USB2=0x3f17    #Model
  100.     ;;
  101. *P1505n)
  102.     MODEL=P1505n; FWMODEL=$MODEL
  103.     USB1=0x03f0    #Vendor
  104.     USB2=0x4017    #Model
  105.     ;;
  106. *1000)
  107.     MODEL=1000; FWMODEL=$MODEL
  108.     USB1=0x03f0    #Vendor
  109.     USB2=0x0517    #Model
  110.     ;;
  111. *1005)
  112.     MODEL=1005; FWMODEL=$MODEL
  113.     USB1=0x03f0    #Vendor
  114.     USB2=0x1317    #Model
  115.     ;;
  116. *1018)
  117.     MODEL=1018; FWMODEL=$MODEL
  118.     USB1=0x03f0 #Vendor
  119.     USB2=0x4117 #Model
  120.     ;;
  121. *1020)
  122.     MODEL=1020; FWMODEL=$MODEL
  123.     USB1=0x03f0 #Vendor
  124.     USB2=0x2b17 #Model
  125.     ;;
  126. *)
  127.     log "Only HP LaserJet 100[05],1018,1020,P100[5678],P1505 are supported"
  128.     exit
  129.     ;;
  130. esac
  131.  
  132. #
  133. #    The special command line argument "install-usermap" will install
  134. #    the proper entry into the /etc/hotplug/usb.usermap file
  135. #
  136. case "$1" in
  137. install-usermap)
  138.     if [ "$USB2" != "" ]; then
  139.     if [ -w /etc/hotplug/usb.usermap ]; then
  140.         USERMAP=/etc/hotplug/usb.usermap
  141.     elif [ -d /etc/hotplug/usb/ ]; then
  142.         USERMAP=/etc/hotplug/usb/foo2zjs.usermap
  143.         if [ ! -s $USERMAP ]; then
  144.             echo > $USERMAP
  145.         fi
  146.     else
  147.         log "No /etc/hotplug usermap!"
  148.         exit
  149.     fi
  150.     chmod 664 $USERMAP
  151.     ex - $USERMAP <<-EOF
  152.     g/^hplj$MODEL/d
  153.     \$a
  154.     hplj$MODEL 0x0003 $USB1 $USB2 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
  155.     .
  156.     w
  157.     q
  158.     EOF
  159.     else
  160.     log "I don't know the USB info for this model yet.  Please run"
  161.     log "usb_printerid on the usb device and send the output to:"
  162.     log "rick.richardson@comcast.net"
  163.     fi
  164.     exit 0
  165.     ;;
  166. esac
  167.  
  168. #
  169. #    Procedure to load a single device with firmware
  170. #
  171. load1() {
  172.     _dev="$1"
  173.     fw="$FWDIR/sihp$FWMODEL.dl"
  174.     if [ ! -f "$fw" ]; then
  175.     log "Missing HP LaserJet $MODEL firmware file $fw"
  176.     log "...read foo2zjs installation instructions and run ./getweb $MODEL"
  177.     return 1
  178.     fi
  179.  
  180.     log "loading HP LaserJet $MODEL firmware $fw to $_dev ..."
  181.     # There is a timeout problem with udev and FC4, so spin it off.
  182.     (
  183.     if cat $fw > $_dev; then
  184.         log "... download successful."
  185.     else
  186.         log "... download failed."
  187.     fi
  188.     ) &
  189.     return 0
  190. }
  191.  
  192. #
  193. #    OK, now download firmware to any printers that need it
  194. #
  195. if [ "$DEV" != "" ]; then
  196.     #
  197.     # force downloading to a specific device
  198.     #
  199.     load1 "$DEV"
  200. elif [ -x $PRINTERID ]; then
  201.     #
  202.     # Sniff around for printers that need a firmware download
  203.     #
  204.     usblps=`find /dev/usb -name 'lp*'`" "`find /dev -name 'usblp*'`
  205.     for dev in $usblps; do
  206.     status=`$PRINTERID $dev 2>/dev/null | grep -y "hp LaserJet $MODEL"`
  207.     if [ "$status" != "" ]; then
  208.         # This is a LaserJet 100x
  209.         chmod 0666 $dev
  210.         status=`$PRINTERID $dev | grep 'FWVER'`
  211.         if [ "$status" = "" ]; then
  212.         # Firmware is not yet loaded
  213.         load1 "$dev"
  214.         else
  215.         log "HP LaserJet $MODEL firmware already loaded into $dev"
  216.         fi
  217.     fi
  218.     done
  219. else
  220.     log "HP LaserJet $MODEL firmware was not downloaded..."
  221.     log "...couldn't find $PRINTERID and DEV is not set"
  222. fi
  223.